{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 800000 entries, 0 to 799999\n",
      "Data columns (total 40 columns):\n",
      "0     800000 non-null int64\n",
      "1     800000 non-null int64\n",
      "2     800000 non-null int64\n",
      "3     800000 non-null int64\n",
      "4     800000 non-null int64\n",
      "5     800000 non-null int64\n",
      "6     800000 non-null int64\n",
      "7     800000 non-null int64\n",
      "8     800000 non-null int64\n",
      "9     800000 non-null int64\n",
      "10    800000 non-null int64\n",
      "11    800000 non-null int64\n",
      "12    800000 non-null int64\n",
      "13    800000 non-null int64\n",
      "14    800000 non-null object\n",
      "15    800000 non-null object\n",
      "16    800000 non-null object\n",
      "17    800000 non-null object\n",
      "18    800000 non-null object\n",
      "19    800000 non-null object\n",
      "20    800000 non-null object\n",
      "21    800000 non-null object\n",
      "22    800000 non-null object\n",
      "23    800000 non-null object\n",
      "24    800000 non-null object\n",
      "25    800000 non-null object\n",
      "26    800000 non-null object\n",
      "27    800000 non-null object\n",
      "28    800000 non-null object\n",
      "29    800000 non-null object\n",
      "30    800000 non-null object\n",
      "31    800000 non-null object\n",
      "32    800000 non-null object\n",
      "33    800000 non-null object\n",
      "34    800000 non-null object\n",
      "35    800000 non-null object\n",
      "36    800000 non-null object\n",
      "37    800000 non-null object\n",
      "38    800000 non-null object\n",
      "39    800000 non-null object\n",
      "dtypes: int64(14), object(26)\n",
      "memory usage: 244.1+ MB\n"
     ]
    }
   ],
   "source": [
    "df = pd.read_csv('train.csv',header=None)\n",
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>30</th>\n",
       "      <th>31</th>\n",
       "      <th>32</th>\n",
       "      <th>33</th>\n",
       "      <th>34</th>\n",
       "      <th>35</th>\n",
       "      <th>36</th>\n",
       "      <th>37</th>\n",
       "      <th>38</th>\n",
       "      <th>39</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>789003</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>4127</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>...</td>\n",
       "      <td>776ce399</td>\n",
       "      <td>082ff924</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>b691bac2</td>\n",
       "      <td>0</td>\n",
       "      <td>be7c41b4</td>\n",
       "      <td>88ed380d</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>305147</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>61</td>\n",
       "      <td>26</td>\n",
       "      <td>7</td>\n",
       "      <td>897</td>\n",
       "      <td>199</td>\n",
       "      <td>4</td>\n",
       "      <td>36</td>\n",
       "      <td>73</td>\n",
       "      <td>...</td>\n",
       "      <td>e5ba7672</td>\n",
       "      <td>891589e7</td>\n",
       "      <td>4632bcdc</td>\n",
       "      <td>a458ea53</td>\n",
       "      <td>8cdcc535</td>\n",
       "      <td>0</td>\n",
       "      <td>3a171ecb</td>\n",
       "      <td>3fdb382b</td>\n",
       "      <td>e8b83407</td>\n",
       "      <td>49d68486</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49716</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>113</td>\n",
       "      <td>32</td>\n",
       "      <td>3204</td>\n",
       "      <td>78</td>\n",
       "      <td>6</td>\n",
       "      <td>32</td>\n",
       "      <td>62</td>\n",
       "      <td>...</td>\n",
       "      <td>e5ba7672</td>\n",
       "      <td>4bcc9449</td>\n",
       "      <td>55dd3565</td>\n",
       "      <td>5840adea</td>\n",
       "      <td>fdb016d3</td>\n",
       "      <td>0</td>\n",
       "      <td>32c7478e</td>\n",
       "      <td>2d69156d</td>\n",
       "      <td>010f6491</td>\n",
       "      <td>ca20955a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5094</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>17</td>\n",
       "      <td>22</td>\n",
       "      <td>8118</td>\n",
       "      <td>86</td>\n",
       "      <td>1</td>\n",
       "      <td>27</td>\n",
       "      <td>91</td>\n",
       "      <td>...</td>\n",
       "      <td>07c540c4</td>\n",
       "      <td>452e336e</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>d3ac1dc7</td>\n",
       "      <td>0</td>\n",
       "      <td>423fab69</td>\n",
       "      <td>4fcc135f</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>510383</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>76</td>\n",
       "      <td>1</td>\n",
       "      <td>912</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>228</td>\n",
       "      <td>...</td>\n",
       "      <td>e5ba7672</td>\n",
       "      <td>b76fb0de</td>\n",
       "      <td>21ddcdc9</td>\n",
       "      <td>a458ea53</td>\n",
       "      <td>6f393b20</td>\n",
       "      <td>0</td>\n",
       "      <td>423fab69</td>\n",
       "      <td>65e74c52</td>\n",
       "      <td>c9f3bea7</td>\n",
       "      <td>8f72e5eb</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 40 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        0   1   2    3   4     5    6   7   8    9   ...         30  \\\n",
       "789003   0   0   8    0   2  4127    0   0   2    2  ...   776ce399   \n",
       "305147   0   0  61   26   7   897  199   4  36   73  ...   e5ba7672   \n",
       "49716    0   0   0  113  32  3204   78   6  32   62  ...   e5ba7672   \n",
       "5094     0   0   1   17  22  8118   86   1  27   91  ...   07c540c4   \n",
       "510383   0   1   1   76   1   912    7   1   4  228  ...   e5ba7672   \n",
       "\n",
       "               31         32         33         34  35         36         37  \\\n",
       "789003   082ff924          0          0   b691bac2   0   be7c41b4   88ed380d   \n",
       "305147   891589e7   4632bcdc   a458ea53   8cdcc535   0   3a171ecb   3fdb382b   \n",
       "49716    4bcc9449   55dd3565   5840adea   fdb016d3   0   32c7478e   2d69156d   \n",
       "5094     452e336e          0          0   d3ac1dc7   0   423fab69   4fcc135f   \n",
       "510383   b76fb0de   21ddcdc9   a458ea53   6f393b20   0   423fab69   65e74c52   \n",
       "\n",
       "               38         39  \n",
       "789003          0          0  \n",
       "305147   e8b83407   49d68486  \n",
       "49716    010f6491   ca20955a  \n",
       "5094            0          0  \n",
       "510383   c9f3bea7   8f72e5eb  \n",
       "\n",
       "[5 rows x 40 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sample(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>8.000000e+05</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.255895</td>\n",
       "      <td>1.878958</td>\n",
       "      <td>90.995645</td>\n",
       "      <td>16.785155</td>\n",
       "      <td>5.182579</td>\n",
       "      <td>1.803876e+04</td>\n",
       "      <td>91.966901</td>\n",
       "      <td>14.194829</td>\n",
       "      <td>13.423526</td>\n",
       "      <td>102.650386</td>\n",
       "      <td>0.327994</td>\n",
       "      <td>2.431985</td>\n",
       "      <td>0.214099</td>\n",
       "      <td>5.784368</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.436363</td>\n",
       "      <td>7.043450</td>\n",
       "      <td>340.393370</td>\n",
       "      <td>324.918993</td>\n",
       "      <td>8.058630</td>\n",
       "      <td>6.648007e+04</td>\n",
       "      <td>411.870806</td>\n",
       "      <td>57.741705</td>\n",
       "      <td>35.431940</td>\n",
       "      <td>217.223975</td>\n",
       "      <td>0.589100</td>\n",
       "      <td>4.814627</td>\n",
       "      <td>2.929230</td>\n",
       "      <td>33.905975</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-2.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.240000e+02</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>2.432000e+03</td>\n",
       "      <td>16.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>36.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>9.928000e+03</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>106.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>780.000000</td>\n",
       "      <td>18522.000000</td>\n",
       "      <td>65535.000000</td>\n",
       "      <td>507.000000</td>\n",
       "      <td>2.513122e+06</td>\n",
       "      <td>233523.000000</td>\n",
       "      <td>8807.000000</td>\n",
       "      <td>5064.000000</td>\n",
       "      <td>12661.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>133.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>6702.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  0              1              2              3   \\\n",
       "count  800000.000000  800000.000000  800000.000000  800000.000000   \n",
       "mean        0.255895       1.878958      90.995645      16.785155   \n",
       "std         0.436363       7.043450     340.393370     324.918993   \n",
       "min         0.000000       0.000000      -2.000000       0.000000   \n",
       "25%         0.000000       0.000000       0.000000       1.000000   \n",
       "50%         0.000000       0.000000       2.000000       3.000000   \n",
       "75%         1.000000       1.000000      32.000000      10.000000   \n",
       "max         1.000000     780.000000   18522.000000   65535.000000   \n",
       "\n",
       "                  4             5              6              7   \\\n",
       "count  800000.000000  8.000000e+05  800000.000000  800000.000000   \n",
       "mean        5.182579  1.803876e+04      91.966901      14.194829   \n",
       "std         8.058630  6.648007e+04     411.870806      57.741705   \n",
       "min         0.000000  0.000000e+00       0.000000       0.000000   \n",
       "25%         0.000000  7.240000e+02       0.000000       0.000000   \n",
       "50%         2.000000  2.432000e+03      16.000000       3.000000   \n",
       "75%         7.000000  9.928000e+03      72.000000      10.000000   \n",
       "max       507.000000  2.513122e+06  233523.000000    8807.000000   \n",
       "\n",
       "                  8              9              10             11  \\\n",
       "count  800000.000000  800000.000000  800000.000000  800000.000000   \n",
       "mean       13.423526     102.650386       0.327994       2.431985   \n",
       "std        35.431940     217.223975       0.589100       4.814627   \n",
       "min         0.000000       0.000000       0.000000       0.000000   \n",
       "25%         2.000000       8.000000       0.000000       0.000000   \n",
       "50%         8.000000      36.000000       0.000000       1.000000   \n",
       "75%        20.000000     106.000000       1.000000       2.000000   \n",
       "max      5064.000000   12661.000000       8.000000     133.000000   \n",
       "\n",
       "                  12             13  \n",
       "count  800000.000000  800000.000000  \n",
       "mean        0.214099       5.784368  \n",
       "std         2.929230      33.905975  \n",
       "min         0.000000       0.000000  \n",
       "25%         0.000000       0.000000  \n",
       "50%         0.000000       2.000000  \n",
       "75%         0.000000       7.000000  \n",
       "max       768.000000    6702.000000  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据中，整型数据最大值是2e6级别，所以将整型数据转成int32，以节约内存"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 800000 entries, 0 to 799999\n",
      "Data columns (total 40 columns):\n",
      "0     800000 non-null int32\n",
      "1     800000 non-null int32\n",
      "2     800000 non-null int32\n",
      "3     800000 non-null int32\n",
      "4     800000 non-null int32\n",
      "5     800000 non-null int32\n",
      "6     800000 non-null int32\n",
      "7     800000 non-null int32\n",
      "8     800000 non-null int32\n",
      "9     800000 non-null int32\n",
      "10    800000 non-null int32\n",
      "11    800000 non-null int32\n",
      "12    800000 non-null int32\n",
      "13    800000 non-null int32\n",
      "14    800000 non-null object\n",
      "15    800000 non-null object\n",
      "16    800000 non-null object\n",
      "17    800000 non-null object\n",
      "18    800000 non-null object\n",
      "19    800000 non-null object\n",
      "20    800000 non-null object\n",
      "21    800000 non-null object\n",
      "22    800000 non-null object\n",
      "23    800000 non-null object\n",
      "24    800000 non-null object\n",
      "25    800000 non-null object\n",
      "26    800000 non-null object\n",
      "27    800000 non-null object\n",
      "28    800000 non-null object\n",
      "29    800000 non-null object\n",
      "30    800000 non-null object\n",
      "31    800000 non-null object\n",
      "32    800000 non-null object\n",
      "33    800000 non-null object\n",
      "34    800000 non-null object\n",
      "35    800000 non-null object\n",
      "36    800000 non-null object\n",
      "37    800000 non-null object\n",
      "38    800000 non-null object\n",
      "39    800000 non-null object\n",
      "dtypes: int32(14), object(26)\n",
      "memory usage: 201.4+ MB\n"
     ]
    }
   ],
   "source": [
    "for col in df.columns:\n",
    "    if df[col].dtype == 'int64':\n",
    "        df[col] = df[col].astype('int32')\n",
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>8.000000e+05</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "      <td>800000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.255895</td>\n",
       "      <td>1.878958</td>\n",
       "      <td>90.995645</td>\n",
       "      <td>16.785155</td>\n",
       "      <td>5.182579</td>\n",
       "      <td>1.803876e+04</td>\n",
       "      <td>91.966901</td>\n",
       "      <td>14.194829</td>\n",
       "      <td>13.423526</td>\n",
       "      <td>102.650386</td>\n",
       "      <td>0.327994</td>\n",
       "      <td>2.431985</td>\n",
       "      <td>0.214099</td>\n",
       "      <td>5.784368</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.436363</td>\n",
       "      <td>7.043450</td>\n",
       "      <td>340.393370</td>\n",
       "      <td>324.918993</td>\n",
       "      <td>8.058630</td>\n",
       "      <td>6.648007e+04</td>\n",
       "      <td>411.870806</td>\n",
       "      <td>57.741705</td>\n",
       "      <td>35.431940</td>\n",
       "      <td>217.223975</td>\n",
       "      <td>0.589100</td>\n",
       "      <td>4.814627</td>\n",
       "      <td>2.929230</td>\n",
       "      <td>33.905975</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-2.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.240000e+02</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>2.432000e+03</td>\n",
       "      <td>16.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>36.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>9.928000e+03</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>106.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>780.000000</td>\n",
       "      <td>18522.000000</td>\n",
       "      <td>65535.000000</td>\n",
       "      <td>507.000000</td>\n",
       "      <td>2.513122e+06</td>\n",
       "      <td>233523.000000</td>\n",
       "      <td>8807.000000</td>\n",
       "      <td>5064.000000</td>\n",
       "      <td>12661.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>133.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>6702.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  0              1              2              3   \\\n",
       "count  800000.000000  800000.000000  800000.000000  800000.000000   \n",
       "mean        0.255895       1.878958      90.995645      16.785155   \n",
       "std         0.436363       7.043450     340.393370     324.918993   \n",
       "min         0.000000       0.000000      -2.000000       0.000000   \n",
       "25%         0.000000       0.000000       0.000000       1.000000   \n",
       "50%         0.000000       0.000000       2.000000       3.000000   \n",
       "75%         1.000000       1.000000      32.000000      10.000000   \n",
       "max         1.000000     780.000000   18522.000000   65535.000000   \n",
       "\n",
       "                  4             5              6              7   \\\n",
       "count  800000.000000  8.000000e+05  800000.000000  800000.000000   \n",
       "mean        5.182579  1.803876e+04      91.966901      14.194829   \n",
       "std         8.058630  6.648007e+04     411.870806      57.741705   \n",
       "min         0.000000  0.000000e+00       0.000000       0.000000   \n",
       "25%         0.000000  7.240000e+02       0.000000       0.000000   \n",
       "50%         2.000000  2.432000e+03      16.000000       3.000000   \n",
       "75%         7.000000  9.928000e+03      72.000000      10.000000   \n",
       "max       507.000000  2.513122e+06  233523.000000    8807.000000   \n",
       "\n",
       "                  8              9              10             11  \\\n",
       "count  800000.000000  800000.000000  800000.000000  800000.000000   \n",
       "mean       13.423526     102.650386       0.327994       2.431985   \n",
       "std        35.431940     217.223975       0.589100       4.814627   \n",
       "min         0.000000       0.000000       0.000000       0.000000   \n",
       "25%         2.000000       8.000000       0.000000       0.000000   \n",
       "50%         8.000000      36.000000       0.000000       1.000000   \n",
       "75%        20.000000     106.000000       1.000000       2.000000   \n",
       "max      5064.000000   12661.000000       8.000000     133.000000   \n",
       "\n",
       "                  12             13  \n",
       "count  800000.000000  800000.000000  \n",
       "mean        0.214099       5.784368  \n",
       "std         2.929230      33.905975  \n",
       "min         0.000000       0.000000  \n",
       "25%         0.000000       0.000000  \n",
       "50%         0.000000       2.000000  \n",
       "75%         0.000000       7.000000  \n",
       "max       768.000000    6702.000000  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 节约了40多m,且没有损失精度\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 由采样数据可以看到，类别型特征中有一些0值，下面查看这些0值的数量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1a3a677668>"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "zero_counts = []\n",
    "for col in df.columns:\n",
    "    if df[col].dtype == 'object':\n",
    "        fe = df[col]\n",
    "        zero_counts.append(fe.apply(lambda x : len(x) < 3).sum())\n",
    "sns.barplot(x=np.arange(14,40,1),y=zero_counts)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from collections import Counter"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查看类别特征的类别数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "14 1185\n",
      "15 529\n",
      "16 264473\n",
      "17 103566\n",
      "18 259\n",
      "19 14\n",
      "20 10666\n",
      "21 542\n",
      "22 3\n",
      "23 28255\n",
      "24 4658\n",
      "25 222451\n",
      "26 3058\n",
      "27 26\n",
      "28 8578\n",
      "29 172322\n",
      "30 10\n",
      "31 3763\n",
      "32 1803\n",
      "33 4\n",
      "34 200209\n",
      "35 15\n",
      "36 15\n",
      "37 36845\n",
      "38 69\n",
      "39 27958\n"
     ]
    }
   ],
   "source": [
    "for i in range(14,40):\n",
    "    fe = df[i]\n",
    "    print(i,len(fe.unique()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "d = pd.get_dummies(df[14],dtype='byte')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 800000 entries, 0 to 799999\n",
      "Columns: 1185 entries,  000d72dd to  ffe3cd83\n",
      "dtypes: int8(1185)\n",
      "memory usage: 904.1 MB\n"
     ]
    }
   ],
   "source": [
    "d.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 对于33，35，38特征，缺失值较多，且类别较少，先看一下他们和标签的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7MAAAF3CAYAAAB3+BzkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3XvcZlVdN/7PdxhAEBAZUBEYwcLHyJ9hEmmaoimiPUIH6/FQqVn85EnLSkp/9RjZQVMf7aBhVB4yEU+paCSgQJaKggojBxUcD+Bg4qAYB4Fh1u+PvW/m4ua67vu675mLmT3zfr9e92v2ta917b3W3muvtb9rH6ZaawEAAIAhWbG1MwAAAABLJZgFAABgcASzAAAADI5gFgAAgMERzAIAADA4glkAAAAGRzALAADA4AhmAQAAGBzBLAAAAIMjmAUAAGBwVm7tDCzVvvvu2w4++OCtnQ0AAABm4DOf+cy3W2v7LZZucMHswQcfnAsvvHBrZwMAAIAZqKqvTZPObcYAAAAMjmAWAACAwRHMAgAAMDiCWQAAAAZHMAsAAMDgCGYBAAAYHMEsAAAAgyOYBQAAYHAEs1N40pOedMcfADAb69evz4tf/OJcd911WzsrAAzAzILZqnpTVX2rqi6Z8H1V1V9X1ZVVtaaqfnRWeQEAtn2nnnpqLrnkkrz97W/f2lkBYABmeWX2LUmOWeD7Jyc5tP87PsnJM8zLss2/GuvqLABseevXr89ZZ52V1lrOOussV2cBWNTKWS24tfaxqjp4gSTHJfmn1lpLcn5V7V1V+7fWrplVnrYXJ598ctauXTtV2nXr1uXmm2+eaX5222233P/+9586/QMf+MCccMIJU6VdSlmTHau8O1JZE+Xd0naksiY7VnlnWdZZOvXUU7Nx48YkycaNG/P2t789L3zhC7dqnnakfbutlTUZbl1mWJZa97/xjW8kSQ444ICp0s+yXp588sk5++yzp05/0003pQu9Zqeqsvvuu0+d/olPfOJmbZ+ZBbNTOCDJVSOfr+7n3SWYrarj0129zerVq++WzG3L1q5dmysuuySr73WPRdPefuOt2bhh40zzc/vtt+SWb9w0VdqvX//9JS177dq1+eLla3K/e9VU6W+5oWXDhiWtYsluuf3GXL9u/VRpv3n90hqMtWvX5guXr8mqvRdPe9ONmXlZ28Ybc+01354q7frvLm3Za9euzWWXr8le+0yX/sabkttvW9o6lmpDuzFX/9d05f3eEi8arV27Np//wprsvGrKvNyUtBnu35vbjfnetdOV9bbpqvsd1q5dmzVfuDRZtcd0P7jp5mTD7UtbyRLd2G7Lt6+dsgKtv2FJy+7Ke3mmOnCTmR+8N7aN+fa1U44LL/XAnaFzzjknG/rtsmHDhpxzzjlbPZjt9u0Xs2LV/aZKv/GmW2a8b2/JdddeP11e1n9zScteu3ZtLvnCFdl11UFTpb/1pg1pMz6/+H7bkBuvne684Zb1Vy2eCLaA739/aeeyzNbWDGbHRSdjz/xba6ckOSVJjjjiiNkOJwzE6nvdIy951CFbOxtL9sqPf2XJv7nfvSrPfezWrKrL9+Z/X/pJzaq9k//5U9MF79uSD3106YfmXvskjxzonfufPHPpv9l5VbLvccPbt9/+wDKa3VV7ZKfjHrrlM3M3uP0Da5b+o1V7Z+VTj9rieZm1DR88b2tn4Q6Pf/zj8+EPfzgbNmzIypUr8/jHP35rZylJsmLV/XKPp/7K1s7Gkn3/g/+05N/suuqgrD7u92aQm9n7+gdetbWzwEAt9argiSeemCR59atfPYvsLMkJJ5yww9+NsDXfZnx1ktHhvwOTrNtKeQEAtqJnPvOZWbGiOy1ZsWJFnvWsZ23lHAGwrduawezpSX6lf6vxI5Jcvy0+L3vmmWcu+BkA2HyrVq3K0UcfnarK0UcfnX32mfIZBAB2WDO7d7Oq3pHkqCT7VtXVSf4oyc5J0lp7Y5IzkjwlyZVJbkry3FnlBQDY9j3zmc/M1772NVdlAZjKLN9m/IxFvm9JfmNW69+SXI0FgNlbtWpVXvOa12ztbAAwEFvzNmMAAABYFsEsAAAAgyOYBQAAYHAEswAAAAyOYBYAAIDBEcwCAAAwOIJZAAAABkcwCwAAwOAIZgEAABgcwSwAAACDI5gFAABgcASzAAAADI5gFgAAgMERzAIAADA4glkAAAAGRzALAADA4AhmAQAAGBzBLAAAAIMjmAUAAGBwBLMAAAAMjmAWAACAwRHMAgAAMDiCWQAAAAZHMAsAAMDgCGYBAAAYHMEsAAAAgyOYBQAAYHAEswAAAAyOYBYAAIDBEcwCAAAwOIJZAAAABkcwCwAAwOAIZgEAABgcwSwAAACDI5gFAABgcASzAAAADI5gFgAAgMERzAIAADA4glkAAAAGRzALAADA4AhmAQAAGBzBLAAAAIMjmAUAAGBwBLMAAAAMjmAWAACAwRHMAgAAMDiCWQAAAAZHMAsAAMDgCGYBAAAYHMEsAAAAgzPTYLaqjqmqL1bVlVX1kjHfr66qc6vqc1W1pqqeMsv8AAAAsH2YWTBbVTsleUOSJyc5LMkzquqwecn+MMm7WmsPS/L0JH87q/wAAACw/Zjlldkjk1zZWlvbWrs1yWlJjpuXpiXZq5++V5J1M8wPAAAA24mVM1z2AUmuGvl8dZIfn5fmpCRnVdULk9wzyRNmmB8AAAC2E7O8Mltj5rV5n5+R5C2ttQOTPCXJ26rqLnmqquOr6sKquvDaa6+dQVYBAAAYklkGs1cnOWjk84G5623Ez0vyriRprX0yyT2S7Dt/Qa21U1prR7TWjthvv/1mlF0AAACGYpbB7AVJDq2qQ6pql3QveDp9XpqvJ/mpJKmqH0oXzLr0CgAAwIJmFsy21jYkeUGSM5Ncnu6txZdW1cur6tg+2e8m+fWqujjJO5I8p7U2/1ZkAAAAuJNZvgAqrbUzkpwxb97LRqYvS/KoWeYBAACA7c8sbzMGAACAmRDMAgAAMDiCWQAAAAZHMAsAAMDgCGYBAAAYHMEsAAAAgyOYBQAAYHAEswAAAAyOYBYAAIDBEcwCAAAwOIJZAAAABkcwCwAAwOAIZgEAABgcwSwAAACDI5gFAABgcASzAAAADI5gFgAAgMERzAIAADA4glkAAAAGRzALAADA4AhmAQAAGBzBLAAAAIMjmAUAAGBwBLMAAAAMjmAWAACAwRHMAgAAMDiCWQAAAAZHMAsAAMDgCGYBAAAYHMEsAAAAgyOYBQAAYHAEswAAAAyOYBYAAIDBEcwCAAAwOIJZAAAABkcwCwAAwOAIZgEAABgcwSwAAACDI5gFAABgcASzAAAADI5gFgAAgMERzAIAADA4glkAAAAGRzALAADA4AhmAQAAGBzBLAAAAIMjmAUAAGBwBLMAAAAMjmAWAACAwRHMAgAAMDgzDWar6piq+mJVXVlVL5mQ5her6rKqurSqTp1lfgAAANg+rJzVgqtqpyRvSPLEJFcnuaCqTm+tXTaS5tAkL03yqNbad6rqPrPKDwAAANuPWV6ZPTLJla21ta21W5OcluS4eWl+PckbWmvfSZLW2rdmmB8AAAC2E7MMZg9IctXI56v7eaMelORBVfXxqjq/qo6ZYX4AAADYTszsNuMkNWZeG7P+Q5McleTAJP9RVQ9prX33TguqOj7J8UmyevXqLZ9TAAAABmWWV2avTnLQyOcDk6wbk+YDrbXbWmtfSfLFdMHtnbTWTmmtHdFaO2K//fabWYYBAAAYhlkGsxckObSqDqmqXZI8Pcnp89K8P8njkqSq9k132/HaGeYJAACA7cDMgtnW2oYkL0hyZpLLk7yrtXZpVb28qo7tk52ZZH1VXZbk3CQnttbWzypPAAAAbB9m+cxsWmtnJDlj3ryXjUy3JL/T/wEAAMBUZnmbMQAAAMyEYBYAAIDBEcwCAAAwOIJZAAAABkcwCwAAwOAIZgEAABgcwSwAAACDI5gFAABgcASzAAAADI5gFgAAgMERzAIAADA4glkAAAAGRzALAADA4AhmAQAAGBzBLAAAAIMjmAUAAGBwBLMAAAAMjmAWAACAwRHMAgAAMDiCWQAAAAZHMAsAAMDgCGYBAAAYHMEsAAAAg7NysQRV9eAkxyU5IElLsi7J6a21y2ecNwAAABhrwWC2qn4/yTOSnJbk0/3sA5O8o6pOa629csb5AwAAmMrJJ5+ctWvXzmz5X/7yl5MkJ5544kyW/8AHPjAnnHDCTJa9PVrsyuzzkvxwa+220ZlV9doklyYRzAIAANuEtWvX5srLrsjqPQ+cyfJ32bBzkuTWq27e4sv++n9fvcWXub1bLJjdmOT+Sb42b/7+/XcAAADbjNV7HpiXHvGirZ2NJXvFhX+5tbMwOIsFsy9K8tGquiLJVf281Ul+MMkLZpkxAAAAmGTBYLa19uGqelCSI9O9AKqSXJ3kgtba7XdD/gAAAOAuFn2bcWttY5Lz74a8AAAAwFT8P7MAAAAMjmAWAACAwRHMAgAAMDiCWQAAAAZHMAsAAMDgCGYBAAAYHMEsAAAAgyOYBQAAYHAEswAAAAyOYBYAAIDBEcwCAAAwOIJZAAAABkcwCwAAwOAIZgEAABgcwSwAAACDI5gFAABgcASzAAAADI5gFgAAgMERzAIAADA4glkAAAAGZ6bBbFUdU1VfrKorq+olC6R7WlW1qjpilvkBAABg+zCzYLaqdkryhiRPTnJYkmdU1WFj0u2Z5DeTfGpWeQEAAGD7Mssrs0cmubK1tra1dmuS05IcNybdnyR5VZLvzzAvAAAAbEdmGcwekOSqkc9X9/PuUFUPS3JQa+1DM8wHAAAA25lZBrM1Zl6748uqFUlel+R3F11Q1fFVdWFVXXjttdduwSwCAAAwRLMMZq9OctDI5wOTrBv5vGeShyQ5r6q+muQRSU4f9xKo1toprbUjWmtH7LfffjPMMgAAAEMwy2D2giSHVtUhVbVLkqcnOX3uy9ba9a21fVtrB7fWDk5yfpJjW2sXzjBPAAAAbAdmFsy21jYkeUGSM5NcnuRdrbVLq+rlVXXsrNYLAADA9m/lLBfeWjsjyRnz5r1sQtqjZpkXAAAAth+zvM0YAAAAZkIwCwAAwOAIZgEAABgcwSwAAACDI5gFAABgcASzAAAADI5gFgAAgMERzAIAADA4glkAAAAGRzALAADA4AhmAQAAGBzBLAAAAIMjmAUAAGBwBLMAAAAMjmAWAACAwRHMAgAAMDiCWQAAAAZHMAsAAMDgCGYBAAAYHMEsAAAAgyOYBQAAYHAEswAAAAyOYBYAAIDBEcwCAAAwOIJZAAAABkcwCwAAwOAIZgEAABgcwSwAAACDI5gFAABgcASzAAAADI5gFgAAgMERzAIAADA4glkAAAAGRzALAADA4AhmAQAAGBzBLAAAAIMjmAUAAGBwBLMAAAAMjmAWAACAwRHMAgAAMDiCWQAAAAZHMAsAAMDgCGYBAAAYHMEsAAAAgyOYBQAAYHAEswAAAAyOYBYAAIDBEcwCAAAwOIJZAAAABkcwCwAAwOAIZgEAABicmQazVXVMVX2xqq6sqpeM+f53quqyqlpTVR+tqgfMMj8AAABsH2YWzFbVTknekOTJSQ5L8oyqOmxess8lOaK19tAk70nyqlnlBwAAgO3HLK/MHpnkytba2tbarUlOS3LcaILW2rmttZv6j+cnOXCG+QEAAGA7Mctg9oAkV418vrqfN8nzkvzbDPMDAADAdmLlDJddY+a1sQmrfinJEUkeO+H745McnySrV6/eUvkDAABgoGZ5ZfbqJAeNfD4wybr5iarqCUn+IMmxrbVbxi2otXZKa+2I1toR++2330wyCwAAwHDMMpi9IMmhVXVIVe2S5OlJTh9NUFUPS/J36QLZb80wLwAAAGxHZhbMttY2JHlBkjOTXJ7kXa21S6vq5VV1bJ/s1Un2SPLuqrqoqk6fsDgAAAC4wyyfmU1r7YwkZ8yb97KR6SfMcv0AAABsn2Z5mzEAAADMhGAWAACAwRHMAgAAMDiCWQAAAAZHMAsAAMDgCGYBAAAYHMEsAAAAgyOYBQAAYHAEswAAAAyOYBYAAIDBEcwCAAAwOIJZAAAABkcwCwAAwOAIZgEAABgcwSwAAACDI5gFAABgcASzAAAADI5gFgAAgMERzAIAADA4glkAAAAGRzALAADA4AhmAQAAGBzBLAAAAIMjmAUAAGBwBLMAAAAMjmAWAACAwRHMAgAAMDiCWQAAAAZHMAsAAMDgCGYBAAAYHMEsAAAAgyOYBQAAYHAEswAAAAyOYBYAAIDBEcwCAAAwOIJZAAAABkcwCwAAwOAIZgEAABgcwSwAAACDI5gFAABgcASzAAAADI5gFgAAgMERzAIAADA4glkAAAAGRzALAADA4AhmAQAAGBzBLAAAAIMjmAUAAGBwBLMAAAAMjmAWAACAwZlpMFtVx1TVF6vqyqp6yZjvd62qd/bff6qqDp5lfgAAANg+zCyYraqdkrwhyZOTHJbkGVV12Lxkz0vyndbaDyZ5XZK/mFV+AAAA2H7M8srskUmubK2tba3dmuS0JMfNS3Nckrf20+9J8lNVVTPMEwAAANuBlTNc9gFJrhr5fHWSH5+UprW2oaquT7IqybeXsqKTTz45Z5999tTpb7rpprTWlrKKJauq7L777lOnf+ITn5gTTjhhqrTr1q3Ldetvyv8+4/JF0952+8ZsnG1Rs6KSnXeablzklg0bs0+tm3rZ69aty/r1La/4wG1Tpd9we+6W8q7cabq0t96erMpSy5u89b2LF2LD7cmMq3FqCWW9bUNyW1taWa9bn5z5junS3343lXenKcu7YUOy4vallffW9ck1b5quEG1DklmWt5KasgdotyXrbltaWbP++tz+pk9M94MNG++myjzl+O1tty+jvOuz4S3vn+4Hsz54l3jgrrtt+rzsiP3txvXrc9NbXjXdwjdsSNrGqfOyZLUiWTnlgXvbrVl326qpF71u3brcvP66XPGmF06VfuOGW++W43bFyl2my89tt2TdbftMvehtrS7Psh5va2VN7obz5O9cl+ef++Kp0t92+63ZOMPyrqjKzjtNV49v2XBL9tlp+nrMbIPZcVdY59eUadKkqo5PcnySrF69evNzNnB77bVXbr755ukS33JLsnGGHWuSrFiRFbvuOlXS3Xbt8j+tJZU1ye233JKacXlrxYqsnLK8KzO78m685ZZsnHFZV6xYkZ13ma6sO+8y2317y91U3l2nLO+usy7vxtmWd8WKFdl15+nKmp2HXdZkxypvV9bpTpyy8y5LKuuOZun79vZs3Di7G8xWrKjsuvOUp247r5xxPa5snPHocVfeKQehdt5NXSbJ0utybqnZXglZUVmx63T1eLdd1eOlqlmNvFTVI5Oc1Fp7Uv/5pUnSWnvFSJoz+zSfrKqVSb6ZZL+2QKaOOOKIduGFF84kzwAAAGxdVfWZ1toRi6Wb5TOzFyQ5tKoOqapdkjw9yenz0pye5Nn99NOSnLNQIAsAAADJDG8z7p+BfUGSM5PslORNrbVLq+rlSS5srZ2e5B+TvK2qrkxyXbqAFwAAABY0y2dm01o7I8kZ8+a9bGT6+0l+YZZ5AAAAYPszy9uMAQAAYCYEswAAAAyOYBYAAIDBEcwCAAAwOIJZAAAABkcwCwAAwOAIZgEAABgcwSwAAACDI5gFAABgcASzAAAADE611rZ2Hpakqq5N8rWtsOp9k3x7K6x3a9iRyprsWOXdkcqa7Fjl3ZHKmuxY5d2Rypoo7/ZsRyprsmOVd0cqa7JjlXdrlfUBrbX9Fks0uGB2a6mqC1trR2ztfNwddqSyJjtWeXeksiY7Vnl3pLImO1Z5d6SyJsq7PduRyprsWOXdkcqa7Fjl3dbL6jZjAAAABkcwCwAAwOAIZqd3ytbOwN1oRyprsmOVd0cqa7JjlXdHKmuyY5V3Ryprorzbsx2prMmOVd4dqazJjlXebbqsnpkFAABgcFyZBQAAYHAEs1OoqodX1eer6sqq+uuqqq2dp2lV1VFV9aF++riqWlNVF1XVhVX16JF0z66qK/q/Z4/M36WqTqmqL1XVF6rq5/v5v1NVl/XL+2hVPWCRfBxcVZdsgfI8o98Xa6rqw1W17zKX81tVdUlVXVpVLxqZ/85++1xUVV+tqovm/W51Vd1QVS8emfebVXV5Vb19ZN6PVdXtVfW05eRvQp7vXVXv68v+6ap6yIR0J43mr5/34qpqc9urqp7VL2dNVX2iqn6kn39QVZ3bl+fSqvqtkWW8uq8Da/p87L2lyjahHNUfb1f26/zRke+WWl8fU1WfraoN0+6TqnphVX2x3w6vmpDmvKqa+g1/VbXnSP26qKq+XVV/2X+3ut/2n+vL+5RFlnV4VX2yz9+aqvpfU6z/T0bagLOq6v79/HtV1Qer6uJ+ec8d+c1f9MfKJdOsY3NV1S/09e/cMd/dZXtX1emjbUtV7VNVZ/d14+yqunc/f2x9Ws52XCT/E9uocXWqurbx5pE68caR9H9WVVdV1Q3z1rFfVX2qrys/Oe+751TV6yfk7Yb+3zv6hc0s6+5V9a/9sXZpVb1y5LuJ9bmq3tHP++2RefPbqKOq6vqR7fKyfv49qmv/5urqH48s45B+u1xRXVu+y2J5WWa579jGVfWA6vrANX39PHCZy5zYRlXVq/qyXl4j5yB9/ZrbDm+sqp36+YdX1fm1qa8/cjPKOv/4+pH+ePl832bsNcUy7pL/RerOc6rq2pF9/2uLLP+kqvrGSPol798a0+7UmP5+zHrHfjeSZlJfNenYnqqvqqq3LPT9InmauO1H0jytPx4X7N8mtSW1QF83YTkTzxGr6if7fF5UVbtNU8aR3y5a1iUs67zq2u+5Mt2nn//8/ni4qKr+s6oOW2Q5/9gft2uq6j1VtUc/f0n1foHljz0PGvn+Tvu2qnauqrf2Zbi8ql46knbJ57fT1M1a5Fx7yVpr/hb5S/LpJI9MUkn+LcmTt3aelpD3o5J8qJ/eI5tuLX9oki/00/skWdv/e+9++t79d3+c5E/76RVJ9u2nH5dk9376hCTvXCQfBye5ZDPLsjLJt0by8KokJy1jOQ9JckmS3ftlfiTJoWPS/d8kL5s3771J3p3kxSPzvpDkkJHPOyU5J8kZSZ62Bfflq5P8UT/94CQfnZDupHn5OyjJmen+f+a5bfcTI/v4yUk+1U/vn+RH++k9k3wpyWH956OTrOyn/yLJX8y47j6lP94qySNG8ric+npwX+f/aZp90tfvjyTZtf98nwnpzktyxGaU8TNJHtNPn5LkhH76sCRfXeS3D5qrt0nun+SaJHsv8pu9RqZ/M8kb++n/b25/JtkvyXVJdkny00nO7o+Teya5cHQZM9rvH07yuGm2d5KfS3JqRtqWdO3CS/rpl4yUa1J9WvJ2XCDvE9uoSXUqC7SNfT73T3LDvPlPT/LWCb95TpLXT/juhv7fo9L3C5u5r3af21d9ffmP9P3jpPqc5H5JvjZvOePaqLF57PffHv30zkk+leQR/ed3JXl6P/3GkfUv6diaotx3bON0/cGz++nHJ3nbMpd5cMa0Uena6o+n61d2SvLJJEf13+01sk3eO1L2s0b2w1OSnLfMPI07vi5I8th++leT/Mkiyxib/0XqzsQ6PGEdJ2Wkz1tmWe/S7mRMf7+U9WbhvmrSsT22HoxZ9lsW+n6Rsk7c9v28PZN8LMn5WaR/y5RtSUb6ugXq/6R28I1JnjuLsi5xWeeN2x65c796bJIPL7Kc0fSvzab+akn1foHljz0PmrRvkzwzyWkj2+urSQ7uPy/5/HapdTNjzrWX+ufK7CKqav90Fe+Trdvq/5TkZ7ZytpIkVXVydaOu80enj+lHY/4zXWeUJGmt3dCXIelOTOemn5Tk7Nbada2176Q7eT2m/+5Xk7yi//3G1tq3++lzW2s39WnOT3LHaHRVnVhVF/SjTnfkK8nKfvRnbjRq96UWuf+7Z1VVkr2SrOvX+QPVjVJ/pqr+o6oe3M+/b3VXES/u/34iyQ8lOb+1dlNrbUOSf0/ys/O2bSX5xSTvGJn3M+k6o0tH5r0xyQOTnF6brjK8MF0n+K0llm90/cf0o7MXV9VH+9mHJflokrTWvpDk4Kq6b5/+D/oRw48k+R/zFve6JL+XTfs7rbVP9Ps6Gdl/rbVrWmuf7af/O8nlSQ7oP5/Vb687/aYfUf2PPr+f7bfxlijvcUn+qXXOT7J3fzwup75+tbW2JsnGMev+vX5E8uKRUdsTkryytXZL//tv9Wl3q6rT+jr8ziRLGiWet95Dk9wnXeeadPtn7irHvbKpbu9U3VXxuWPq/+3z9KXW2hX99Lp09W2//jcPr6p/74+HM/vtltba90ayMNoGtCR79vV+j3TB7IZ0de7fW2sbWms3Jrk4m7b1Usp6l/1bVXtU1Ztr01XMn6/u6tujk7yxL/PE7d2PZv9Okj+dt7rjkry1n35rNrXXY+vTQttxGSa2UZlQpxbSWju/tXbNnVZQdXi6IPkp/aj2blX13H4U/t+TPGok7SHVXUW7oKr+ZN7i9+rbxsuqu6q35POBvg09t5++Nclns6kvGFuf0wVa9+nzPndV+S5t1ALrbK21uatZO/d/rd/ej0/ynv670X0/KS9Tm7SNM9IuJzk3XT2b+81d2pZJfdUCbVRLco90J+K79uX9r/43c8fzyv770eN5c8s76fj6H+lOhpOu7Z27+2VsOzUp/4vUnYXyNa693izz251+3l36+37+2L62qn6wqj7S5+uzVfUDWaCvGnds9/PH1oPqvL4/Xv81Xd+xLFNs+z9J18Z8f2T9k/ZvskhbMr+vq/HnZcmYc8Tqrk7+YpKX1cjVwS1R1urucHlvX6YLqupR/fy79E2LrGNsv9pvs9eMLOeFo+n7Nmu3TNHuLdHY86DeXfZtv/57VtXKPj+3JvleTXl+u1DdrKqX9dv2kuquFt/pztb+853OtZdlcyLhHeEvyRFJPjLy+SezBUa0t1De9un/3SndiNFD03UaVyU5NN1J1btG85suaPtCupPVR/bzXpzkD0fS/J9+3t79sl6brgF4d5L7jsnH6+d+n+7q3Sn9ulerDA/sAAARd0lEQVQk+VCSx6QbdWtJHtWne1OWMZKa5GlJvpfu6snHkuzUz/9oNl1d+fEk5/TT70zyopHtdK90weyXkqxKNwr1ySR/M289j0ly4cjne/bp9shdr3x+NZuuJhyQLjjeKcscOU13In1V+tGwkf3850le208fmS7YeHj/9/m+LHsluXIuf+lGCf9qfj7nre/FSf5hzPyDk3w9Y67EJflgkl/qp3dPco9++tDR7baZ5f1QkkePpPtouuNx2fV1/j5Jd1X6E9l0l8Hcui9KN7r5qX5//lg//3eSvKmffmi/D5Z1ZTbJy5K8ZuTz/v1+vDrJd5I8vJ9/fDYdX7umuzp6yLxlHZlu4GFFupPFTyTZr//uf83luf/8Z/12umQkzZ7pTsSvSXJDkp8eOZ4/3u/jfdOd3P3uFtq/f5HkL0fSzV2xOC+bRownbu90AdDPZt6IfpLvzlv/dxaqT5O243L2ab+MSW3UpDp1cJIbk3yun/+TY5Y5/+rNc7LpyuD+6Y7T/dIFDB8f+e70JL/ST/9G7nxl9vvpTlR2SneSvVl3kaQ7/tYmeeAi9Xn+/hrbRvV5XJ9uAOXfkvzwyG926rfnDdl05X3fJFeOpDlobj2T8rKEsi20jU9N8lv99M+l6+dWZXLbMravGlnXW+bviySvSfLdJNcn+bN5353Zl+nUkbr2Q31+r0ryjSQPWMb+nHR8fSLJcSPH53/30xPbqYXyP6HuPCfd8bMm3eDEQf38Sdv0pL7urEl3bnHvZZT3vGxqW8b291m4r/1Ukp/tp+/RpxnbVy10bE+qB33dOjtd3b9/vz03+86vMdv+YUneO2abjN2/maItyV37unHnZQdnwjni/G2xBct6avo+IcnqJJf30wv1TZ9P1/b8n/R3Ovbf/UaSL6c//+7nnZAu8Ju7o22fkfRvTjcodW421efnZEy9X0YZx54HLbBvd05yWpJr0/VFx48s76tZ5Px2obo5r8xvS/LUefm907n2cv9cmV3cuOdj292ei/F+sao+m+4k6IfTjRA/OMlXWmtXtK6m/PPoD1pr72utPTjdiPXcSP2kMq5MN4L18dbaj6Zr3F8zmqiqfildgPHqftbR/d/n0h1ID04X4CTJVa21j/fT/5xuJHRqVbVzusbhYekOmDVJXtqPIP9EkndXd9/936U7+Ui6kfqT+7Lf3lq7vrV2ebrG6ux0txZdnO4kedQzcueRoj9O8rq26YrAJH+Z5Pdba7cvpWzzPCLJx1prX+nzfV0//5VJ7t2X8YXptvGGdAMs72vdCOT30p3Apror33+QriMZq6oel+R5SX5/3vw90jXCL2p3HnVMVf1Bv965UdKdk/x9VX0+XcO54PMiSyjvpHq57Po6xhOSvLn1dxmMrHtlutvCHpHkxCTv6kcQH5P+mGrd6PmaaQo4wdNz5zr2jCRvaa0dmO7WwLf1I9xHJ/mVfr9/Kt2J8twxNXf3yNvS3Ya1Md3VgockObv/zR9mZNS9tfYHrbWD0u2/F/Szn5Sug75/ksOTvL6q9mqtnZXudqJP9Hn9ZO56rCxm0v59QpI3jOTrO2N+O3Z7V3d18gdba+9bQj4WbMvHbMclm9RG9V9PqlPXJFndWntYuuDg1JriOcQRP57uNtJrW3fl4Z0j3z0qm+rY2+b97tOttbV9W/WOLLE9HtWP6L8jyV+31tb2syfV59HfLdRGfTZdEPYjSf4myfvnvujb8sPT1esjq3t/wEL7d9G8LGKhbfziJI+tqs8leWy64HFDxrQti/RVY1XVD6YLTg9MdzL5+Kp6zMi2eFK/jF3T9XdJVwd/uz/OfzvJPy6hrIsdX7+a5Deq6jPpBsFu7eePbacWy/+EuvPBdLc5PjTdrflzd1pMaq9PTvID6dqua9Ldtrg5JvX3k/raPZMcMLe9Wmvf7/O4Jc8fH5PkHX3dX5fuVs/NMn/b98fE65L87pjkC/VDi7Ul8/u6u5yX9fM36xxxIRPq2RPS9XUXpduXe/X7clLf9KzW2v+Trh78ZJJfHknzhtbaD6Q7l/rDkeW/sfV3tI3U17TWnpuuj7g83YBzMrneL8XY86BF9u2RSW7v83NIkt+tqgeOSTfp/Hahuvm46t5j8Pl0+/2H5/12/rn2sqzc3AXsAK7OnW+/ODDLuGVnS6uqQ9J1oj/WWvtOVb0l3WhgMt2tWh+r7nanfdOV8aiRrw9MN2qzPslNSeY6tHenC3zm8vCEdCcij239rXPpGu9XtNb+bl5+Dx6Tr6U26of3ef9yv8x3pXsm7q/TXY05fNoFtdb+MX0HX1V/nm4bzOV1ZbqRpoeP/OTHkzytupe27J1kY1V9v7U2/0UrRyQ5rb+TYt90twJuaK29P9OrjNk2fef53D6PleQr/d/jxqVP17kfkuTiPj8HJvlsVR3ZWvtmVT00yT+ke35k/Uj5d04XyL69tfYvd8pY9wKL/5nkp/rBkqQ7WfqvJD+S7srg6O0ryy5vun1y0MjnuWNvWfV1Gev+l76Mn66qjen2ZyakX5LqXri1srX2mZHZz8umW9A+WVX36NdZSV7YWjtzzHL2SvKv6UbMzx8p06WttUcuko1T+9/+Ubp69cq+vFdW1VfSDUR9urX2Z+mu5qaqTk1yxVKLm/HbbNL8+caleWSSh1fVV9P1Y/epqvNaa0cl+a/qbh++pg9Q526HmlSfJm3H5ZjURs2t/y51qrV2bZK5W48/U1VfTvcc74VLWO9C23HSd5vbHo86JckVrbXRF7xMqs+jFmyj7shYa2dU1d9W1b5t5Ja51tp3q+q8fj3/N92t4yv7k8fRvnpSXpbyKMjY7dOfvP1ccscg4M+31q7v2+j5v1mRJfZV6a6Onj8XWFXVv6UfIBrJw/er6vR0tzifneTZSeZe3vfudO38Ukw8vlr3iMvRfV4elO65+mRCO1VVJy6S/7vUndH+KMnfpxt8nlvHuL7xv0bW9/fp7sLYHGP7+7nVjUk/6aWgk/qq5drSF1Lmb/s90w2Entcfj/dLd4vpsZm8f48ak6/RQcJxfd0kW7JNmm9cG7Ui3R2KN48mnHDsprX2jf7f/+77wiPTPXo46rT0gXoW6eNaa7dX9/jMiekGaSbV+6WYdB600L59ZrrnfG9L8q2q+ni6c9m185Y99vx2rjjzM9K3s3+b7grwVVV1UjbFKZPOtZfFldlFtO6Zhv+uqkf0FfxXknxgK2cr6W5xuTHJ9dU9N/nkfv4XkhxS3fMaSTfqkeSOZzrm3oL4o+lul1qf7jalo6t7W+6903VUZ/YnXR/Mpsb4p5Jc1v/+YelGlY9td37268wkv1qb3s52QPVvfEuyuqrmTrCfkeQ/l1jmbyQ5rKrmnmd7YrrbQr6X5CtV9Qv9OqtvQJPulq4T+vk7zV3xqE1voVud7mAaHRl6QrqXY90R4LbWfrK1dnBr7eB0o1N/PiaQTWvtkJF070nyv5cYyCbdSNpj+wGLVNU+/b97V/92ziS/lu5q1/fSnRT8bHXPzu2Z5Kl9Xj7fWrvPSH6uTvdyp2/25f6XJL/cWvvS3Ir7+vGP/XZ97WimquqYdKOOx7ZNz0sn3S1C17TuatYvp7vVZLPLm/4WyX5/PiLJ9f3xuOT6uoCz0tXX3eet+/3pr3L0J2y7JPl2um39rH7+Q9Ld+roc40Yjv97nOVX1Q+ka/WvTlfeEfpAhVfWgqrpnXxfel+450HePLOeLSfabO9aqe1PhD/fTh46kOzZdezF/3fdNd3V3bX/MrOrnP7Qv71lLLOuk/XtWNl0ZTr8v5xu7vVtrJ7fW7t/X60cn+VIfyCZdvXl2P/3sbGqvx9anBbbjcoxto/rpsXWquue25t5C+8B0Vzvmn0Qs5FNJjqqqVX0d+YWR7z6e7qpI0m/HEUdW90ztinRXBpbaHqfP85+mawNeNO+rSfX5Dou0Ufcb6a+OTHe+sr7fXnv383fLpva6pbtlb+4tmqP7ftG8LGLiNq6qfWvTVd6Xprs9MhnTtizSV03y9XTHz8p+3Y9Ncnl1z/Xt3y9nZborznPH87o+XdLVuSUNQC10fI30nSvSXYGae/v22HZqUv77NGPrzly5esdm0zE0tr2el/5n0z1CsWwL9PeT+trvJbm6uudsU1W79nkc21ctM1sfS/L0vk3eP90g9rKN2/atu3Nt35Gyn5+uv78wk/dvsnBbMq6vG3tels0/R5y6rL35fdDhE+bfu6+/c29a3zndoP4l/efRfvWns+l4OyvJ8/vjM9W9ab+qu1th7nzrqemP2wXq/dQmnQctsm+/nu6Oier36SOyqS0ZXfak89tJdXMucP12dTHB/Dcc3+Vce9naZt6nvCP8pRuNuCTd/fCvz8h98ls5X29JV9n/NV1g8px+/jF9RfzPdLemzr3N+PfTvczgonQnmKPPj/1quuc/rszIW+OSPKCvqGvSNUCr+/kfSXc17qL+7/SR3/xWuucKPt+v5wfSPQ9xWbqOb026K3+7L6PMz+/LvCbdAbuqn39INt0yfFn6N6MluW+6E5q55xzmnhP+jz7dxemuMs7frs9fIA8nZcIzs2OWs9y3DT453W3EF6d7gUTSjZZf0e/bf8nIc0HprpB/MV3jOfZ55Nz52Yd/SPec1dz+u7Cf/+h0I2xrRr57Sv/dlemexZibP/cm3EP79Oene+nA2GeAllHeSnerz5f7/Tf6Ftul1tcfS3eifGO6AZxLR37zkr4uXJTupCXpAo1/TnfcfzbJ4/v5u6UbeV2TbkT2E1nGM7PpgpUHz5t3WLrg4+I+L0f381eke176831+zk3XMf9SkttG9sdFSQ7vf3N4vx0uTnfM/3o//739MuaOnwP6+ffv687cOuaeh75Hv20u6/fv4VuwPu+R7jaqS/r5P9fPPy+bnuVZdHvnrs/0rer3/RX9v3PP1Y2tTwttx2WWdVIbNalO/Xy/jy7u5z91ZFmvSldvN/b/ntTPf05G3nqZ7sr6l9I9z/RX2fQ85yHp2uAL0tXz0Wdmz0l3u+xcu7zk54TTXWlqfXnntt2vLVKf77S/FmijXjCyXc5P8hP9/If2dWlNvy1fNvL7B6b73weuTHdFYteF8rLEsk7axk/r69qX0rWruy7Stkzqq8a2UekGB/+u38aXZdN7E+7b79c1/Xb6m2x6Nu/R6d4ee3G6QHxJzwgvcnz9Vl/WL6U7v5j7HxImtVOT8r9Q3XnFyL4/NyNt5YRt+rZ+vWvSDVrtv4xynpfxb6o9KXfu78f2ten6wXP6PHwmm57LnNRXTTq2J9WDSnf+eVm6gbH3Z/nnFxO3/aRtssD+PSoLtCUZ39fd5bwsC5wjZvPOpRaqZ/v2+V4zt+5+/l36pnTPUX8mm463v8qmZ9T/KpvOrc9N/3x/ursaXptN55ov6Lfjx0e249uz6a3kE+v9Ess89jxogX27R7r28tI+ryeOpPtqFjm/XahupnuB3JXpYoY3Z+R/IMki59pL+ZtrhAAAAGAw3GYMAADA4AhmAQAAGBzBLAAAAIMjmAUAAGBwBLMAAAAMjmAWALYRVXWPqvp0VV1cVZdW1R/3899SVV+pqov6v8MXWxYAbO9Wbu0MAAB3uCXd/0F7Q1XtnOQ/q+rf+u9ObK29ZyvmDQC2KYJZANhGtO4/f7+h/7hz/+c/hAeAMdxmDADbkKraqaouSvKtJGe31j7Vf/VnVbWmql5XVbtuxSwCwDahukFgAGBbUlV7J3lfkhcmWZ/km0l2SXJKki+31l6+FbMHAFudK7MAsA1qrX03yXlJjmmtXdM6tyR5c5Ijt2rmAGAbIJgFgG1EVe3XX5FNVe2W5AlJvlBV+/fzKsnPJLlk6+USALYNXgAFANuO/ZO8tap2Sjfg/K7W2oeq6pyq2i9JJbkoyfO3ZiYBYFvgmVkAAAAGx23GAAAADI5gFgAAgMERzAIAADA4glkAAAAGRzALAADA4AhmAQAAGBzBLAAAAIMjmAUAAGBw/n8IcNhm2YcFqgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 1152x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i in [33,35,38]:\n",
    "    ef = df[i]\n",
    "    label = df[0]\n",
    "#     ef = pd.concat([label,ef],axis=1)\n",
    "    plt.figure(figsize=(16,6))\n",
    "    sns.boxplot(ef,label)\n",
    "    plt.show()\n",
    "        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 继续观察35，38的0值对label的影响"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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UquOtzKi8131nzFjBtOmTSs02OQpX7685el+gPr169OlSxcAatasyezZs/nkk08K7PPzzz+zZcsWS4aBJ598ko0bN9KiRYu7Oj+AZcuW0alTJ95///273vdeSAYBIYSwotGjR7N582aOHj1KeHg4o0ePpm/fviQlJeHt7V2gfECeQ4cOcfbsWcuT/B4eHgDY2RW8+aSUIj09nczMTLTWZGVlUbVqVQDWrFlDVFQUGRkZ1K1bl1mzZlGuXDlGjx7NypUruXHjBo0bN+a///0vq1evZuLEidjb2xMXF8eGDRtse1H486xGE0KIh8J7771HcHAwMTExfPzxx3csHwCmyp49evS4YzLO0NBQWrZsSbVq1ahWrRpt27bF29ub8+fPM3bsWH788Ud27NhBcHAwn376KWBKkRMfH8+ePXu4ceMG3377LR06dKB///4MHTq0RAINyMxGCCFsKi4ujn/+859A4eUDAObPn8/cuXPvONbhw4fZt2+fpeha69atiYuLIzU1laSkJJo0aQJAZmYmoaGhAGzYsIGPPvqI69evc/HiRXx9fenYsaO13l6xSbARQggbu92MZdeuXWRnZ1O/fv07jrN06VIaNWpEuXLlAGjfvj2//vor3t7etG7dmtjY2AL909PTef3119m2bRs1atRg1KhRllIEJU1uo5WQ09P+zelp/75zRyHEQ6Wo8gF5YmNjiYwsaj1VQTVr1mTjxo1kZ2eTlZXFxo0b8fb2plGjRmzZsoXDhw8DcP36dQ4ePGgJLK6urly7du2WlW0lSYKNEELY0IABA7h27RoGg4GPPvrIUj4gzzfffHNLsImPj8fd3Z2FCxfy2muv4evrC0BERAR169bF39+fgIAAAgIC6NixI5UrV2b27NlERkZiMBho1KgR+/fvp0KFCrz66qv4+/vz7LPPEhISUmLv+2Y2KzHwV2PrEgN5s5pqr4+1yjGEuBcPa/kLKTFQMv6sJQaEEEIIQIKNEEKIEiDBRgghhM1JsBFCCGFzEmyEEELYnAQbIYQQNifBRgghrGzBggUYDAZ8fX0ZPny4pf348eO0bNmSwMBADAYDq1atKrDf8ePHKVeuXIFszy+99BJVqlTBz69gkvtdu3YRGhqKv78/HTt2JDU19Y7n9dZbb+Hn54efnx8LFiywtB89epSGDRvi6elJjx49yMzMvNe3XiRJVyOE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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i in [35,38]:\n",
    "    ef = df[i]\n",
    "    index = ef == '0'\n",
    "    sns.countplot(df[0],hue=ef)\n",
    "    plt.legend(loc='right')\n",
    "    plt.show()\n",
    "    \n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 可以看到0值，这里可能是缺失值，对labele的影响比较大，所以这里为了避免造成噪声，将这两列直接删除"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = df.drop([35,38],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "38"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.to_csv('train_2.csv',index=None,header=None)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 处理验证集数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>30</th>\n",
       "      <th>31</th>\n",
       "      <th>32</th>\n",
       "      <th>33</th>\n",
       "      <th>34</th>\n",
       "      <th>35</th>\n",
       "      <th>36</th>\n",
       "      <th>37</th>\n",
       "      <th>38</th>\n",
       "      <th>39</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2636</td>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "      <td>768</td>\n",
       "      <td>18</td>\n",
       "      <td>1</td>\n",
       "      <td>18</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>d4bb7bd8</td>\n",
       "      <td>2804effd</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>723b4dfd</td>\n",
       "      <td>ad3062eb</td>\n",
       "      <td>32c7478e</td>\n",
       "      <td>b34f3128</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>24</td>\n",
       "      <td>3</td>\n",
       "      <td>10003</td>\n",
       "      <td>22</td>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>21</td>\n",
       "      <td>...</td>\n",
       "      <td>8efede7f</td>\n",
       "      <td>7b06fafe</td>\n",
       "      <td>85684dc0</td>\n",
       "      <td>a458ea53</td>\n",
       "      <td>7ae4d78f</td>\n",
       "      <td>0</td>\n",
       "      <td>32c7478e</td>\n",
       "      <td>67a18c8c</td>\n",
       "      <td>2bf691b1</td>\n",
       "      <td>6aba8db0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>1477</td>\n",
       "      <td>81</td>\n",
       "      <td>3</td>\n",
       "      <td>43</td>\n",
       "      <td>90</td>\n",
       "      <td>...</td>\n",
       "      <td>e5ba7672</td>\n",
       "      <td>281769c2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>73d06dde</td>\n",
       "      <td>ad3062eb</td>\n",
       "      <td>3a171ecb</td>\n",
       "      <td>aee52b6f</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>42851</td>\n",
       "      <td>17</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>e5ba7672</td>\n",
       "      <td>53515e19</td>\n",
       "      <td>21ddcdc9</td>\n",
       "      <td>5840adea</td>\n",
       "      <td>567ed6ad</td>\n",
       "      <td>0</td>\n",
       "      <td>32c7478e</td>\n",
       "      <td>6095f986</td>\n",
       "      <td>ea9a246c</td>\n",
       "      <td>03219b28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>623</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>12</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>8efede7f</td>\n",
       "      <td>88416823</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>ad3062eb</td>\n",
       "      <td>423fab69</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 40 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   0   1     2   3   4      5   6   7   8   9   ...         30         31  \\\n",
       "0   0   1  2636   6   9    768  18   1  18  18  ...   d4bb7bd8   2804effd   \n",
       "1   1   0     1  24   3  10003  22   6   4  21  ...   8efede7f   7b06fafe   \n",
       "2   0   0     0   2   3   1477  81   3  43  90  ...   e5ba7672   281769c2   \n",
       "3   1   0     1   3   0  42851  17   0   0  11  ...   e5ba7672   53515e19   \n",
       "4   1   1    -1   0   0    623   0   5  12  12  ...   8efede7f   88416823   \n",
       "\n",
       "          32         33         34         35         36         37  \\\n",
       "0          0          0   723b4dfd   ad3062eb   32c7478e   b34f3128   \n",
       "1   85684dc0   a458ea53   7ae4d78f          0   32c7478e   67a18c8c   \n",
       "2          0          0   73d06dde   ad3062eb   3a171ecb   aee52b6f   \n",
       "3   21ddcdc9   5840adea   567ed6ad          0   32c7478e   6095f986   \n",
       "4          0          0          0   ad3062eb   423fab69          0   \n",
       "\n",
       "          38         39  \n",
       "0          0          0  \n",
       "1   2bf691b1   6aba8db0  \n",
       "2          0          0  \n",
       "3   ea9a246c   03219b28  \n",
       "4          0          0  \n",
       "\n",
       "[5 rows x 40 columns]"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('eval.csv',header=None)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = df.drop([35,38],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "for col in df.columns:\n",
    "    if df[col].dtype == 'int64':\n",
    "        df[col] = df[col].astype('int32')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.to_csv('eval_2.csv',header=None,index=None)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 导入包以及常量设置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using TensorFlow version 1.13.1\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from __future__ import absolute_import\n",
    "from __future__ import division\n",
    "from __future__ import print_function\n",
    "\n",
    "import time\n",
    "\n",
    "import tensorflow as tf\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO) # Set to INFO for tracking training, default is WARN. ERROR for least messages\n",
    "\n",
    "print(\"Using TensorFlow version %s\\n\" % (tf.__version__))\n",
    "\n",
    "\n",
    "CONTINUOUS_COLUMNS =  [\"I\"+str(i) for i in range(1,14)] # 1-13 inclusive\n",
    "CATEGORICAL_COLUMNS = [\"C\"+str(i) for i in range(1,25)] # 1-24 inclusive\n",
    "LABEL_COLUMN = [\"clicked\"]\n",
    "\n",
    "TRAIN_DATA_COLUMNS = LABEL_COLUMN + CONTINUOUS_COLUMNS + CATEGORICAL_COLUMNS\n",
    "# TEST_DATA_COLUMNS = CONTINUOUS_COLUMNS + CATEGORICAL_COLUMNS\n",
    "\n",
    "FEATURE_COLUMNS = CONTINUOUS_COLUMNS + CATEGORICAL_COLUMNS\n",
    "BATCH_SIZE = 256\n",
    "STEP = 400"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据提供"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [],
   "source": [
    "def generate_input_fn(filename,batch_size = BATCH_SIZE):\n",
    "    def _input_fn():\n",
    "        file_input = tf.train.string_input_producer([filename])\n",
    "        reader = tf.TextLineReader()\n",
    "        key,value = reader.read_up_to(file_input,num_records=batch_size)\n",
    "        \n",
    "        cont_def = [[0] for i in range(1,14)]\n",
    "        cate_def = [[' '] for i in range(1,25)]\n",
    "        label_def = [[0]]\n",
    "        col_def = label_def + cont_def + cate_def\n",
    "        \n",
    "        columns = tf.decode_csv(value,record_defaults=col_def)\n",
    "        \n",
    "        features = dict(zip(TRAIN_DATA_COLUMNS,columns))\n",
    "        \n",
    "        for feature_name in CATEGORICAL_COLUMNS:\n",
    "            features[feature_name] = tf.expand_dims(features[feature_name], -1)\n",
    "    \n",
    "        label = features.pop(TRAIN_DATA_COLUMNS[0])\n",
    "        return features,label\n",
    "    return _input_fn"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 生成特征列"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### wide部分特征，为稀疏的类别onehot部分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "metadata": {},
   "outputs": [],
   "source": [
    "wide_columns = []\n",
    "for i in CATEGORICAL_COLUMNS:\n",
    "#     wide_columns.append(tf.feature_column.categorical_column_with_hash_bucket(i,hash_bucket_size=1000))\n",
    "    wide_columns.append(tf.contrib.layers.sparse_column_with_hash_bucket(i,hash_bucket_size=1000))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### deep部分特征，为数值型特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "metadata": {},
   "outputs": [],
   "source": [
    "deep_columns = []\n",
    "for name in CONTINUOUS_COLUMNS:\n",
    "    deep_columns.append(tf.contrib.layers.real_valued_column(name))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### deep部分增加embedding的特征，嵌入列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n",
      "WARNING:tensorflow:The default stddev value of initializer was changed from \"1/sqrt(vocab_size)\" to \"1/sqrt(dimension)\" in core implementation (tf.feature_column.embedding_column).\n"
     ]
    }
   ],
   "source": [
    "for i in wide_columns:\n",
    "#     deep_columns.append(tf.feature_column.embedding_column(i,dimension=8))\n",
    "    deep_columns.append(tf.contrib.layers.embedding_column(i,dimension=8))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 创建模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "class modelType():\n",
    "    WIDE = 1\n",
    "    DEEP = 2\n",
    "    WIDE_DEEP = 3\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_model(modeltype=modelType.WIDE_DEEP):\n",
    "    if modeltype == modelType.WIDE:\n",
    "        model = tf.contrib.learn.LinearClassifier(feature_columns=wide_columns)\n",
    "    elif modeltype == modelType.DEEP:\n",
    "        model = tf.contrib.learn.DNNClassifier(feature_columns=deep_columns,hidden_units=[100,50,25])\n",
    "    else :\n",
    "        model = tf.contrib.learn.DNNLinearCombinedClassifier(linear_feature_columns=wide_columns,\n",
    "                                                        dnn_feature_columns=deep_columns,\n",
    "                                                        dnn_hidden_units=[100,75,50,25])\n",
    "    return model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用不同的方式训练数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### wide模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Using default config.\n",
      "WARNING:tensorflow:Using temporary folder as model directory: /var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmpqko8wo91\n",
      "INFO:tensorflow:Using config: {'_task_type': None, '_task_id': 0, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1c9762c208>, '_master': '', '_num_ps_replicas': 0, '_num_worker_replicas': 0, '_environment': 'local', '_is_chief': True, '_evaluation_master': '', '_train_distribute': None, '_eval_distribute': None, '_device_fn': None, '_tf_config': gpu_options {\n",
      "  per_process_gpu_memory_fraction: 1.0\n",
      "}\n",
      ", '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_secs': 600, '_log_step_count_steps': 100, '_protocol': None, '_session_config': None, '_save_checkpoints_steps': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_model_dir': '/var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmpqko8wo91'}\n"
     ]
    }
   ],
   "source": [
    "widemodel = create_model(modelType.WIDE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:Casting <dtype: 'int32'> labels to bool.\n",
      "WARNING:tensorflow:Casting <dtype: 'int32'> labels to bool.\n",
      "WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to \"careful_interpolation\" instead.\n",
      "WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to \"careful_interpolation\" instead.\n",
      "INFO:tensorflow:Create CheckpointSaverHook.\n",
      "INFO:tensorflow:Graph was finalized.\n",
      "INFO:tensorflow:Running local_init_op.\n",
      "INFO:tensorflow:Done running local_init_op.\n",
      "INFO:tensorflow:Saving checkpoints for 0 into /var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmpqko8wo91/model.ckpt.\n",
      "INFO:tensorflow:loss = 0.6931473, step = 1\n",
      "INFO:tensorflow:global_step/sec: 111.682\n",
      "INFO:tensorflow:loss = 0.5095957, step = 101 (0.896 sec)\n",
      "INFO:tensorflow:global_step/sec: 405.772\n",
      "INFO:tensorflow:loss = 0.4705034, step = 201 (0.247 sec)\n",
      "INFO:tensorflow:global_step/sec: 419.375\n",
      "INFO:tensorflow:loss = 0.50582016, step = 301 (0.238 sec)\n",
      "INFO:tensorflow:Saving checkpoints for 400 into /var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmpqko8wo91/model.ckpt.\n",
      "INFO:tensorflow:Loss for final step: 0.4965713.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "LinearClassifier(params={'head': <tensorflow.contrib.learn.python.learn.estimators.head._BinaryLogisticHead object at 0x1c9762b080>, 'feature_columns': [_SparseColumnHashed(column_name='C1', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C2', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C3', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C4', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C5', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C6', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C7', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C8', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C9', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C10', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C11', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C12', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C13', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C14', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C15', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C16', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C17', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C18', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C19', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C20', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C21', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C22', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C23', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C24', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string)], 'optimizer': None, 'gradient_clip_norm': None, 'joint_weights': False})"
      ]
     },
     "execution_count": 187,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "widemodel.fit(input_fn=generate_input_fn('train_2.csv'),steps=STEP)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 验证"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:Casting <dtype: 'int32'> labels to bool.\n",
      "WARNING:tensorflow:Casting <dtype: 'int32'> labels to bool.\n",
      "WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to \"careful_interpolation\" instead.\n",
      "WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to \"careful_interpolation\" instead.\n",
      "INFO:tensorflow:Starting evaluation at 2019-08-31T13:59:50Z\n",
      "INFO:tensorflow:Graph was finalized.\n",
      "INFO:tensorflow:Restoring parameters from /var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmpqko8wo91/model.ckpt-400\n",
      "INFO:tensorflow:Running local_init_op.\n",
      "INFO:tensorflow:Done running local_init_op.\n",
      "INFO:tensorflow:Evaluation [40/400]\n",
      "INFO:tensorflow:Evaluation [80/400]\n",
      "INFO:tensorflow:Evaluation [120/400]\n",
      "INFO:tensorflow:Evaluation [160/400]\n",
      "INFO:tensorflow:Evaluation [200/400]\n",
      "INFO:tensorflow:Evaluation [240/400]\n",
      "INFO:tensorflow:Evaluation [280/400]\n",
      "INFO:tensorflow:Evaluation [320/400]\n",
      "INFO:tensorflow:Evaluation [360/400]\n",
      "INFO:tensorflow:Evaluation [400/400]\n",
      "INFO:tensorflow:Finished evaluation at 2019-08-31-13:59:52\n",
      "INFO:tensorflow:Saving dict for global step 400: accuracy = 0.75369143, accuracy/baseline_label_mean = 0.25269532, accuracy/threshold_0.500000_mean = 0.75369143, auc = 0.68339014, auc_precision_recall = 0.41850227, global_step = 400, labels/actual_label_mean = 0.25269532, labels/prediction_mean = 0.25580394, loss = 0.52350515, precision/positive_threshold_0.500000_mean = 0.59879154, recall/positive_threshold_0.500000_mean = 0.076596074\n"
     ]
    }
   ],
   "source": [
    "wide_eval = widemodel.evaluate(input_fn=generate_inpu_fn('eval_2.csv'),steps=STEP)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.52350515, 'accuracy': 0.75369143, 'labels/prediction_mean': 0.25580394, 'labels/actual_label_mean': 0.25269532, 'accuracy/baseline_label_mean': 0.25269532, 'auc': 0.68339014, 'auc_precision_recall': 0.41850227, 'accuracy/threshold_0.500000_mean': 0.75369143, 'precision/positive_threshold_0.500000_mean': 0.59879154, 'recall/positive_threshold_0.500000_mean': 0.076596074, 'global_step': 400}\n"
     ]
    }
   ],
   "source": [
    "print(wide_eval)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### deep模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Using default config.\n",
      "WARNING:tensorflow:Using temporary folder as model directory: /var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmp6ut06va5\n",
      "INFO:tensorflow:Using config: {'_task_type': None, '_task_id': 0, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1c975142e8>, '_master': '', '_num_ps_replicas': 0, '_num_worker_replicas': 0, '_environment': 'local', '_is_chief': True, '_evaluation_master': '', '_train_distribute': None, '_eval_distribute': None, '_device_fn': None, '_tf_config': gpu_options {\n",
      "  per_process_gpu_memory_fraction: 1.0\n",
      "}\n",
      ", '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_secs': 600, '_log_step_count_steps': 100, '_protocol': None, '_session_config': None, '_save_checkpoints_steps': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_model_dir': '/var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmp6ut06va5'}\n"
     ]
    }
   ],
   "source": [
    "# deepmodel = create_model(modelType.DEEP)\n",
    "deepmodel = tf.contrib.learn.DNNClassifier(\n",
    "            feature_columns=deep_columns,\n",
    "            hidden_units=[100, 50, 25])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Casting <dtype: 'int32'> labels to bool.\n",
      "WARNING:tensorflow:Casting <dtype: 'int32'> labels to bool.\n",
      "WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to \"careful_interpolation\" instead.\n",
      "WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to \"careful_interpolation\" instead.\n",
      "INFO:tensorflow:Create CheckpointSaverHook.\n",
      "INFO:tensorflow:Graph was finalized.\n",
      "INFO:tensorflow:Running local_init_op.\n",
      "INFO:tensorflow:Done running local_init_op.\n",
      "INFO:tensorflow:Saving checkpoints for 0 into /var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmp6ut06va5/model.ckpt.\n",
      "INFO:tensorflow:loss = 96.9549, step = 1\n",
      "INFO:tensorflow:global_step/sec: 88.841\n",
      "INFO:tensorflow:loss = 0.9192078, step = 101 (1.126 sec)\n",
      "INFO:tensorflow:global_step/sec: 293.785\n",
      "INFO:tensorflow:loss = 1.5045798, step = 201 (0.340 sec)\n",
      "INFO:tensorflow:global_step/sec: 263.895\n",
      "INFO:tensorflow:loss = 0.6649102, step = 301 (0.379 sec)\n",
      "INFO:tensorflow:Saving checkpoints for 400 into /var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmp6ut06va5/model.ckpt.\n",
      "INFO:tensorflow:Loss for final step: 1.2387369.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "DNNClassifier(params={'head': <tensorflow.contrib.learn.python.learn.estimators.head._BinaryLogisticHead object at 0x1c97514208>, 'hidden_units': [100, 50, 25], 'feature_columns': (_RealValuedColumn(column_name='I1', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I2', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I3', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I4', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I5', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I6', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I7', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I8', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I9', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I10', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I11', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I12', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I13', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C1', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c97623a20>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C2', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c8dfa3f98>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C3', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b240>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C4', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b2b0>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C5', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b2e8>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C6', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b278>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C7', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b0b8>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C8', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b0f0>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C9', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c97623f28>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C10', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b160>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C11', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b390>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C12', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b208>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C13', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b550>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C14', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b4a8>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C15', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b588>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C16', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b438>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C17', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b5f8>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C18', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b4e0>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C19', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b6d8>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C20', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b748>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C21', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b898>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C22', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b710>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C23', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b630>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C24', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762c160>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True)), 'optimizer': None, 'activation_fn': <function relu at 0x1a26bb0268>, 'dropout': None, 'gradient_clip_norm': None, 'embedding_lr_multipliers': None, 'input_layer_min_slice_size': None})"
      ]
     },
     "execution_count": 191,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "deepmodel.fit(input_fn=generate_input_fn('train_2.csv'),steps=STEP)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Casting <dtype: 'int32'> labels to bool.\n",
      "WARNING:tensorflow:Casting <dtype: 'int32'> labels to bool.\n",
      "WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to \"careful_interpolation\" instead.\n",
      "WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to \"careful_interpolation\" instead.\n",
      "INFO:tensorflow:Starting evaluation at 2019-08-31T14:00:37Z\n",
      "INFO:tensorflow:Graph was finalized.\n",
      "INFO:tensorflow:Restoring parameters from /var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmp6ut06va5/model.ckpt-400\n",
      "INFO:tensorflow:Running local_init_op.\n",
      "INFO:tensorflow:Done running local_init_op.\n",
      "INFO:tensorflow:Evaluation [40/400]\n",
      "INFO:tensorflow:Evaluation [80/400]\n",
      "INFO:tensorflow:Evaluation [120/400]\n",
      "INFO:tensorflow:Evaluation [160/400]\n",
      "INFO:tensorflow:Evaluation [200/400]\n",
      "INFO:tensorflow:Evaluation [240/400]\n",
      "INFO:tensorflow:Evaluation [280/400]\n",
      "INFO:tensorflow:Evaluation [320/400]\n",
      "INFO:tensorflow:Evaluation [360/400]\n",
      "INFO:tensorflow:Evaluation [400/400]\n",
      "INFO:tensorflow:Finished evaluation at 2019-08-31-14:00:40\n",
      "INFO:tensorflow:Saving dict for global step 400: accuracy = 0.7482031, accuracy/baseline_label_mean = 0.25269532, accuracy/threshold_0.500000_mean = 0.7482031, auc = 0.6248956, auc_precision_recall = 0.35880986, global_step = 400, labels/actual_label_mean = 0.25269532, labels/prediction_mean = 0.20352997, loss = 1.1219258, precision/positive_threshold_0.500000_mean = 0.5186084, recall/positive_threshold_0.500000_mean = 0.04954398\n"
     ]
    }
   ],
   "source": [
    "results = deepmodel.evaluate(input_fn=generate_input_fn('eval_2.csv'), \n",
    "                     steps=STEP)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 193,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 1.1219258, 'accuracy': 0.7482031, 'labels/prediction_mean': 0.20352997, 'labels/actual_label_mean': 0.25269532, 'accuracy/baseline_label_mean': 0.25269532, 'auc': 0.6248956, 'auc_precision_recall': 0.35880986, 'accuracy/threshold_0.500000_mean': 0.7482031, 'precision/positive_threshold_0.500000_mean': 0.5186084, 'recall/positive_threshold_0.500000_mean': 0.04954398, 'global_step': 400}\n"
     ]
    }
   ],
   "source": [
    "print(results)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### deep and wide模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Using default config.\n",
      "WARNING:tensorflow:Using temporary folder as model directory: /var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmp76yu1ipw\n",
      "INFO:tensorflow:Using config: {'_task_type': None, '_task_id': 0, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1c974c8208>, '_master': '', '_num_ps_replicas': 0, '_num_worker_replicas': 0, '_environment': 'local', '_is_chief': True, '_evaluation_master': '', '_train_distribute': None, '_eval_distribute': None, '_device_fn': None, '_tf_config': gpu_options {\n",
      "  per_process_gpu_memory_fraction: 1.0\n",
      "}\n",
      ", '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_secs': 600, '_log_step_count_steps': 100, '_protocol': None, '_session_config': None, '_save_checkpoints_steps': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_model_dir': '/var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmp76yu1ipw'}\n"
     ]
    }
   ],
   "source": [
    "deep_wide_model = create_model(modelType.WIDE_DEEP)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Casting <dtype: 'int32'> labels to bool.\n",
      "WARNING:tensorflow:Casting <dtype: 'int32'> labels to bool.\n",
      "WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to \"careful_interpolation\" instead.\n",
      "WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to \"careful_interpolation\" instead.\n",
      "INFO:tensorflow:Create CheckpointSaverHook.\n",
      "INFO:tensorflow:Graph was finalized.\n",
      "INFO:tensorflow:Running local_init_op.\n",
      "INFO:tensorflow:Done running local_init_op.\n",
      "INFO:tensorflow:Saving checkpoints for 0 into /var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmp76yu1ipw/model.ckpt.\n",
      "INFO:tensorflow:loss = 611.853, step = 2\n",
      "INFO:tensorflow:global_step/sec: 28.4701\n",
      "INFO:tensorflow:loss = 0.52621365, step = 202 (5.518 sec)\n",
      "INFO:tensorflow:global_step/sec: 52.2975\n",
      "INFO:tensorflow:global_step/sec: 377.929\n",
      "INFO:tensorflow:loss = 0.5534214, step = 402 (0.524 sec)\n",
      "INFO:tensorflow:Saving checkpoints for 402 into /var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmp76yu1ipw/model.ckpt.\n",
      "INFO:tensorflow:Loss for final step: 0.5534214.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "DNNLinearCombinedClassifier(params={'head': <tensorflow.contrib.learn.python.learn.estimators.head._BinaryLogisticHead object at 0x1c974c80f0>, 'linear_feature_columns': (_SparseColumnHashed(column_name='C1', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C2', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C3', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C4', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C5', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C6', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C7', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C8', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C9', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C10', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C11', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C12', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C13', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C14', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C15', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C16', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C17', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C18', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C19', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C20', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C21', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C22', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C23', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumnHashed(column_name='C24', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string)), 'linear_optimizer': None, 'joint_linear_weights': False, 'dnn_feature_columns': (_RealValuedColumn(column_name='I1', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I2', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I3', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I4', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I5', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I6', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I7', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I8', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I9', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I10', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I11', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I12', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='I13', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C1', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c97623a20>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C2', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c8dfa3f98>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C3', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b240>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C4', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b2b0>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C5', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b2e8>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C6', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b278>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C7', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b0b8>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C8', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b0f0>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C9', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c97623f28>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C10', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b160>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C11', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b390>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C12', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b208>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C13', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b550>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C14', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b4a8>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C15', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b588>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C16', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b438>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C17', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b5f8>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C18', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b4e0>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C19', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b6d8>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C20', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b748>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C21', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b898>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C22', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b710>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C23', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762b630>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True), _EmbeddingColumn(sparse_id_column=_SparseColumnHashed(column_name='C24', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), dimension=8, combiner='mean', initializer=<tensorflow.python.ops.init_ops.TruncatedNormal object at 0x1c9762c160>, ckpt_to_load_from=None, tensor_name_in_ckpt=None, shared_embedding_name=None, shared_vocab_size=None, max_norm=None, trainable=True)), 'dnn_optimizer': None, 'dnn_hidden_units': [100, 75, 50, 25], 'dnn_activation_fn': <function relu at 0x1a26bb0268>, 'dnn_dropout': None, 'gradient_clip_norm': None, 'embedding_lr_multipliers': None, 'input_layer_partitioner': None, 'fix_global_step_increment_bug': False})"
      ]
     },
     "execution_count": 195,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "deep_wide_model.fit(input_fn=generate_input_fn('eval_2.csv'),steps=STEP)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n",
      "WARNING:tensorflow:Casting <dtype: 'int32'> labels to bool.\n",
      "WARNING:tensorflow:Casting <dtype: 'int32'> labels to bool.\n",
      "WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to \"careful_interpolation\" instead.\n",
      "WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to \"careful_interpolation\" instead.\n",
      "INFO:tensorflow:Starting evaluation at 2019-08-31T14:01:25Z\n",
      "INFO:tensorflow:Graph was finalized.\n",
      "INFO:tensorflow:Restoring parameters from /var/folders/35/bgb2xhmd1071282k33ftx8280000gn/T/tmp76yu1ipw/model.ckpt-402\n",
      "INFO:tensorflow:Running local_init_op.\n",
      "INFO:tensorflow:Done running local_init_op.\n",
      "INFO:tensorflow:Evaluation [40/400]\n",
      "INFO:tensorflow:Evaluation [80/400]\n",
      "INFO:tensorflow:Evaluation [120/400]\n",
      "INFO:tensorflow:Evaluation [160/400]\n",
      "INFO:tensorflow:Evaluation [200/400]\n",
      "INFO:tensorflow:Evaluation [240/400]\n",
      "INFO:tensorflow:Evaluation [280/400]\n",
      "INFO:tensorflow:Evaluation [320/400]\n",
      "INFO:tensorflow:Evaluation [360/400]\n",
      "INFO:tensorflow:Evaluation [400/400]\n",
      "INFO:tensorflow:Finished evaluation at 2019-08-31-14:01:28\n",
      "INFO:tensorflow:Saving dict for global step 402: accuracy = 0.7543555, accuracy/baseline_label_mean = 0.25269532, accuracy/threshold_0.500000_mean = 0.7543555, auc = 0.6999617, auc_precision_recall = 0.43768737, global_step = 402, labels/actual_label_mean = 0.25269532, labels/prediction_mean = 0.25422087, loss = 0.5219527, precision/positive_threshold_0.500000_mean = 0.62756187, recall/positive_threshold_0.500000_mean = 0.06863503\n"
     ]
    }
   ],
   "source": [
    "results = deep_wide_model.evaluate(input_fn=generate_input_fn('eval_2.csv'),steps=STEP)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.5219527, 'accuracy': 0.7543555, 'labels/prediction_mean': 0.25422087, 'labels/actual_label_mean': 0.25269532, 'accuracy/baseline_label_mean': 0.25269532, 'auc': 0.6999617, 'auc_precision_recall': 0.43768737, 'accuracy/threshold_0.500000_mean': 0.7543555, 'precision/positive_threshold_0.500000_mean': 0.62756187, 'recall/positive_threshold_0.500000_mean': 0.06863503, 'global_step': 402}\n"
     ]
    }
   ],
   "source": [
    "print(results)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 从结果来看，wide模型准确率为0.7537，deep模型准确率为0.7482，wide and deep模型准确率为0.7543"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用跨度和深度模型的结合，对模型性能的提升有效果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
